library(ape) #needed for read.nexus
library(stringr) #needed for str_sub

tree <- read.nexus("posteriorTree.nex")
p <- character(length(tree$node.label)) #character array for internal node colours
p[tree$node.label == 0] <- "white" #posterior probability below 0.3
p[tree$node.label == 1] <- "pink" #posterior probability between 0.3 and 0.7
p[tree$node.label == 2] <- "red" #posterior probability exceeding 0.7

p2 <- character(length(tree$tip.label)) #character array for leaf colours
p2[str_sub(tree$tip.label) == 0] <- "white"
p2[str_sub(tree$tip.label) == 2] <- "red"
tree$tip.label <- character(length(tree$tip.label)) #tip labels removed for cleaqr

#function for determining edge colours. Each edge has the colour of its "top" node.
edgecolour <- function(tree,nodecolour){
    col <- character(length(tree$edge[,1]))
    Ntip <- length(tree$tip.label)
    Nedge <- length(tree$edge[,1])
    for (n in 1:Nedge){
        col[n] <- nodecolour[tree$edge[n,1]-Ntip]
    }
    return(col)
}

col = edgecolour(tree,p) #edge colour array for "tree" written.
#eps file of dendrogram is written
postscript("[name of dendrogram].eps", width = 10.98, height = 8.5, bg= 'blue')
plot(tree,type="fan",tip.color=p2,edge.color = col)
tiplabels(pch=21, cex = .2, bg = p2,col = p2)
dev.off()